package top.infopub.mgr.bpa.service.impl;

import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import top.infopub.generic.GenericDao;
import top.infopub.generic.GenericServiceImpl;
import top.infopub.mgr.bpa.dao.BizcostApplyAttDao;
import top.infopub.mgr.bpa.dao.BizcostApplyDao;
import top.infopub.mgr.bpa.dao.BizcostApplyDetailDao;
import top.infopub.mgr.bpa.domain.BizcostApplyDomain;
import top.infopub.mgr.bpa.service.BizcostApplyService;
import top.infopub.mgr.bpa.vo.BizcostApplyVo;
import top.infopub.mgr.flow.cnst.FlowTemplateEnum;
import top.infopub.mgr.flow.service.WsFlowProcessService;
import top.infopub.model.bpa.BizcostApply;
import top.infopub.model.bpa.BizcostApplyAtt;
import top.infopub.model.bpa.BizcostApplyDetail;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

@Service
public class BizcostApplyServiceImpl extends GenericServiceImpl<BizcostApply, String> implements
		BizcostApplyService {

	@Autowired
	private BizcostApplyDao bizcostApplyDao;
	
	@Autowired
    private WsFlowProcessService wsFlowProcess;

    @Autowired
    private BizcostApplyDetailDao bizcostApplyDetailDao;
    
    @Autowired
    private BizcostApplyAttDao bizcostApplyAttDao;
	
	@Override
	public GenericDao<BizcostApply, String> getDao() {
		return bizcostApplyDao;
	}
	
    @Override
    public Page<BizcostApplyDomain> selectPageByDomainWhere(Page<BizcostApplyDomain> page,
                                                            BizcostApplyVo bizcostApplyVo) {
        PageHelper.startPage(page.getPageNum(), page.getPageSize());
        return (Page<BizcostApplyDomain>)bizcostApplyDao.selectByDomainWhere(bizcostApplyVo);
    }

    @Override
    public Page<BizcostApplyDomain> selectMyCheckByDomainWhere(Page<BizcostApplyDomain> page,
                                                               BizcostApplyVo bizcostApplyVo) {
        PageHelper.startPage(page.getPageNum(), page.getPageSize());
        return (Page<BizcostApplyDomain>)bizcostApplyDao.selectMyCheckByDomainWhere(bizcostApplyVo);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void save(BizcostApplyVo bizcostApply, BizcostApplyDetail bizcostApplyDetail,
                     List<BizcostApplyAtt> bizcostApplyAtts) {
        //插入记录
        bizcostApplyDao.insertById(bizcostApply);

        //插入子项
        bizcostApplyDetailDao.insertById(bizcostApplyDetail);
        
        //批量插入附件
        if(CollectionUtils.isNotEmpty(bizcostApplyAtts)){
            bizcostApplyAttDao.insertByBatch(bizcostApplyAtts);
        }
        
        // 注意 这里根据不同的业务分支判断条件 获得不同enum
        FlowTemplateEnum templateEnum = FlowTemplateEnum.BPA_BIZCOST_APPLY;
        // 处理工作流数据
        wsFlowProcess.launch(templateEnum, bizcostApply.getId(), bizcostApply.getProcessId(), null);
        
    }

    @Override
    public BizcostApplyVo queryById(String id) {
        return bizcostApplyDao.queryById(id);
    }

}